package 高频题;

import java.util.Stack;

public class 有效的括号_20 {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for (char c : s.toCharArray()) {
            if (c == '(' || c == '{' || c == '[') {
                stack.push(c);
            } else {
                //c是右括号
                if (!stack.isEmpty() && stack.peek() == leftOf(c)) {
                    //能匹配。就从栈中弹出被匹配的左括号
                    stack.pop();
                } else {
                    //和最近的左括号不匹配
                    return false;
                }
            }
        }
        //所有的左括号都被匹配完了么？没完就是证明括号不合法
        return stack.isEmpty();
    }

    //返回对应的左括号类型
    public char leftOf(char c) {
        if (c == '}') return '{';
        if (c == ')') return '(';
        return '[';
    }
}
